/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Negocio;

import dados.LimiteDeMedicamentosException;
import dados.Medicamento;
import dados.MedicamentoJaAdicionadoException;
import dados.MedicamentoNormal;
import dados.ReceitaNormal;
import dados.ReceitaRenovavel;
import dados.SQLConnection.SQLConnect;
import dados.SQLConnection.SQLReceita;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.StringTokenizer;

/**
 *
 * @author rmb
 */
public class GestaoReceitas {
 
    //TODO consultar historico
    
    private ArrayList<MedicamentoNormal> medicamentosReceitados;
    
    public GestaoReceitas() {
        medicamentosReceitados = new ArrayList<MedicamentoNormal>();
    }

    public void emitirReceitaNormal(ReceitaNormal r) {
        
        SQLConnect c = new SQLConnect();
        c.connectLocalHost();      
        
        emitirReceitaNormal(r);
        
        c.closeConnection();
        
    }
    
     public ArrayList<MedicamentoNormal> getMedicamentosNormais(String nome) {
        
        ArrayList<MedicamentoNormal> medicamentos;
        SQLConnect c = new SQLConnect();
        c.connectLocalHost();
        SQLReceita cr = new SQLReceita(c.getConnection());
        
        
        medicamentos = cr.getMedicamentosNormais(nome);        
        c.closeConnection();
        return medicamentos;
        
    }
    
    public ArrayList<MedicamentoNormal> getMedicamentosReceitados() {
        
        ArrayList<MedicamentoNormal> temp = new ArrayList<MedicamentoNormal>();
        
        for (MedicamentoNormal m : medicamentosReceitados)
            temp.add(m);
        
        return temp;
    }
    
    public void addMecicamentoReceitado(MedicamentoNormal m) throws LimiteDeMedicamentosException,MedicamentoJaAdicionadoException {
        
        if(medicamentosReceitados.size() == 4) 
            throw new LimiteDeMedicamentosException();
        if(medicamentosReceitados.contains(m)) {
            throw new MedicamentoJaAdicionadoException();
        }
        medicamentosReceitados.add(m);
    }
    
    public void addMedicamentoReceitado(String nome,String pActivo) {
        
        //TODO adicionar meds receitados
        
    }
    
    
    public MedicamentoNormal getMedicamentoNormalDescr(String descr) {
       
        SQLConnect c = new SQLConnect();
        c.connectLocalHost();
        SQLReceita cr = new SQLReceita(c.getConnection());
        
        MedicamentoNormal temp = cr.getMedicamentoNormalDescr(descr);                
        c.closeConnection();
        return temp;
    }
    
    public void eliminaMedReceita(String descr) {
        
        Iterator<MedicamentoNormal> it = medicamentosReceitados.iterator();
        boolean found = false;
        MedicamentoNormal m = null;
        
        StringTokenizer st = new StringTokenizer(descr,"*");
        String nome = st.nextToken();        
        nome = nome.trim();
        
        while(it.hasNext() && !found) {
            m = it.next();
            if(m.getNome().equals(nome)) {
                found = true;
                it.remove();
            }
        }
        
    }
    
    public void emitirReceitaRenovavel(ReceitaRenovavel r) {
        SQLConnect c = new SQLConnect();
        c.connect();
        SQLReceita cr = new SQLReceita(c.getConnection());
        
        cr.emitirReceitaRenovavel(r);                
        c.closeConnection();     
    }
    
    public void introduzirMedicamento(MedicamentoNormal m, String cod_receita) {
        SQLConnect c = new SQLConnect();
        c.connect();
        SQLReceita cr = new SQLReceita(c.getConnection());
        
        cr.introduzirMedicamento(m,cod_receita);                
        c.closeConnection();     
    }
    
    public String getCodReceita(ReceitaNormal r,String cod_ut, String cod_med) {
        
        SQLConnect c = new SQLConnect();
        c.connect();
        SQLReceita cr = new SQLReceita(c.getConnection());
        
        String res = cr.getCodReceita(r, cod_ut, cod_med);
        c.closeConnection();
        
        return res;
        
    }

    
}
